/* ----------------------------------------------------------------------------------------------------------------
 *  Soul
 * ----------------------------------------------------------------------------------------------------------------
 */
package pure.engine.idea 
{
	import pure.engine.entity.EntityManager;
	import pure.engine.entity.Entity;
	import pure.engine.system.ns_despair;
	
	use namespace ns_despair;
	
	/**
	 * 魂
	 * [Author] - PURE
	 * 
	 * [Feature] - ① 魂可附于实体，并作出反应
	 *             ② 一个魂仅能附于一个实体
	 *             ③ 多个魂可同时附于一个实体，类似人格分裂
	 *             ④ 魂也可独立存在，但没有任何影响
	 *             ⑤ 实体不知道魂的存在，属于低耦合
	 *             ⑥ 魂具有保存和处理信息的能力
	 *             ⑦ 魂是不可回收再生的
	 * 
	 * [Hint] - 此类可以直接实例化，但属于最抽象的魂
	 */
public class Soul extends Reactor
{
	public function Soul(name:String = 'soul') 
	{
		m_name = name;
		SoulManager.register(this);
	}
	
	
	
	
	//======================
	// Base
	//======================
	
	
	/**
	 * 获取实体宿主
	 */
	public function getEntity():Entity
	{
		return EntityManager.getEntityByID(m_id);
	}

	
	/**
	 * 改变实体宿主
	 * 
	 * [Param] - 实体ID
	 */
	public function setEntity(E:Entity):void
	{
		m_id = E.m_id;
	}

	
	/**
	 * 是否空的，没有实体
	 */
	public function isEmpty():Boolean
	{
		return Boolean(EntityManager.getEntityByID(m_id) == null);
	}

	
	/**
	 * 空心化
	 */
	public function empty():void
	{
		m_id = 0;
	}

		
	/**
	 * [Overwrite]
	 * 
	 * 释放
	 */
	public function dispose():void
	{
		SoulManager.unregister(this);
		
		// 覆写...
	}
	

	
}

}